# ValueError，ZeroDivisionError
# try:
#     num1 = float(input('被除数：'))  # 中断
#     num2 = float(input('除数：'))  # 不会执行
#     print(num1 / num2)
# # 只会捕获ZeroDivisionError，不会捕获ValueError，系统去提示错误
# except ZeroDivisionError:
#     print('出错了')  # 报错之后就会执行
#
# print('Hello Python')

# 同时捕获多个异常
# try:
#     num1 = float(input('被除数：'))  # 中断
#     num2 = float(input('除数：'))  # 不会执行
#     print(num1 / num2)
# # 捕获ZeroDivisionError和ValueError
# except (ZeroDivisionError, ValueError):
#     print('出错了')  # 报错之后就会执行
#
# print('Hello Python')

# 分别捕获多种异常
# try:
#     num1 = float(input('被除数：'))  # 中断
#     num2 = float(input('除数：'))  # 不会执行
#     print(num1 / num2)
# # 捕获ZeroDivisionError和ValueError
# except ZeroDivisionError:
#     print('除数不能为0')  # 报错之后就会执行
# except ValueError:
#     print('输出错误，无法转换为浮点数')
#
# print('Hello Python')

# 统一捕获异常
# try:
#     num1 = float(input('被除数：'))  # 中断
#     num2 = float(input('除数：'))  # 不会执行
#     print(num1 / num2)
# # 捕获ZeroDivisionError和ValueError
# except Exception as e:  # e可能ZeroDivisionError的对象，也可能是ValueError的对象
#     print('出错了')
#     print(e)
#
# print('Hello Python')

# try(可能出错的代码)-except(可以存在多个捕获，出错之后运行的代码)-else(没出错时运行的代码)
# try:
#     num1 = float(input('被除数：'))  # 中断
#     num2 = float(input('除数：'))  # 不会执行
#     print(num1 / num2)
#     # 。。。
# # 捕获ZeroDivisionError和ValueError
# except Exception as e:  # e可能ZeroDivisionError的对象，也可能是ValueError的对象
#     print('出错了')
#     print(e)
# else:  # 不发异常会执行这里
#     print('程序运行正常')
#
# print('Hello Python')


try:
    num1 = float(input('被除数：'))  # 中断
    num2 = float(input('除数：'))  # 不会执行
    print(num1 / num2)
    # 。。。
# 捕获ZeroDivisionError和ValueError
except Exception as e:  # e可能ZeroDivisionError的对象，也可能是ValueError的对象
    print('出错了')
    print(e)
else:  # 不发异常会执行这里
    print('else：程序运行正常时执行')
finally:
    # 通常做资源的关闭操作
    print('finally：不论是否出错，这里始终会运行')

print('Hello Python')